package com.zenithmind.task.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 任务类型枚举
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Getter
@AllArgsConstructor
public enum TaskType {

    /**
     * 个人任务
     */
    PERSONAL(1, "个人任务", "personal"),

    /**
     * 团队任务
     */
    TEAM(2, "团队任务", "team"),

    /**
     * 项目任务
     */
    PROJECT(3, "项目任务", "project");

    /**
     * 类型码
     */
    private final Integer code;

    /**
     * 类型名称
     */
    private final String name;

    /**
     * 类型标识
     */
    private final String key;

    /**
     * 根据类型码获取枚举
     * 
     * @param code 类型码
     * @return 任务类型枚举
     */
    public static TaskType getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (TaskType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        return null;
    }

    /**
     * 根据类型标识获取枚举
     * 
     * @param key 类型标识
     * @return 任务类型枚举
     */
    public static TaskType getByKey(String key) {
        if (key == null) {
            return null;
        }
        for (TaskType type : values()) {
            if (type.getKey().equals(key)) {
                return type;
            }
        }
        return null;
    }

    /**
     * 检查是否为个人任务
     * 
     * @return 是否个人任务
     */
    public boolean isPersonal() {
        return this == PERSONAL;
    }

    /**
     * 检查是否为团队任务
     * 
     * @return 是否团队任务
     */
    public boolean isTeam() {
        return this == TEAM;
    }

    /**
     * 检查是否为项目任务
     * 
     * @return 是否项目任务
     */
    public boolean isProject() {
        return this == PROJECT;
    }
}
